{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "% matplotlib inline\n",
    "from pathlib import Path\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from pandas.io.json import json_normalize\n",
    "import pyarrow as pa   \n",
    "import pyarrow.parquet as pq\n",
    "from fastparquet import ParquetFile\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "from textblob import TextBlob, Word\n",
    "from sklearn.externals import joblib\n",
    "import json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "yelp_dir = Path('data', 'yelp')\n",
    "parquet_dir = yelp_dir / 'parquet'\n",
    "if not parquet_dir.exists():\n",
    "    parquet_dir.mkdir(exist_ok=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "review\n",
      "Arrow error: Capacity error: BinaryArray cannot contain more than 2147483646 bytes, have 2147483692\n",
      "user\n"
     ]
    }
   ],
   "source": [
    "for file in ['review', 'user']:\n",
    "    print(file)\n",
    "    json_file = yelp_dir / 'json' / f'yelp_academic_dataset_{file}.json'\n",
    "    parquet_file = parquet_dir / f'{file}.parquet'\n",
    "\n",
    "    data = json_file.read_text(encoding='utf-8')\n",
    "    json_data = '[' + ','.join([l.strip()\n",
    "                                for l in data.split('\\n') if l.strip()]) + ']\\n'\n",
    "    data = json.loads(json_data)\n",
    "    df = json_normalize(data)\n",
    "    if file == 'review':\n",
    "        df.date = pd.to_datetime(df.date)\n",
    "        latest = df.date.max()\n",
    "        df['year'] = df.date.dt.year\n",
    "        df['month'] = df.date.dt.month\n",
    "        df = df.drop(['date', 'business_id', 'review_id'], axis=1)\n",
    "    if file == 'user':\n",
    "        df.yelping_since = pd.to_datetime(df.yelping_since)\n",
    "        df = (df.assign(member_yrs=lambda x: (latest - x.yelping_since)\n",
    "                        .dt.days.div(365).astype(int))\n",
    "              .drop(['elite', 'friends', 'name', 'yelping_since'], axis=1))\n",
    "    df.dropna(how='all', axis=1).to_parquet(parquet_file, compression='gzip')\n",
    "    try:\n",
    "        pd.read_parquet(parquet_file, engine='pyarrow')\n",
    "    except Exception as e:\n",
    "        print(e)\n",
    "        pd.read_parquet(parquet_file, engine='fastparquet')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "user = pd.read_parquet(parquet_dir / 'user.parquet')\n",
    "review = pd.read_parquet(parquet_dir / 'review.parquet', engine='fastparquet')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>average_stars</th>\n",
       "      <th>compliment_cool</th>\n",
       "      <th>compliment_cute</th>\n",
       "      <th>compliment_funny</th>\n",
       "      <th>compliment_hot</th>\n",
       "      <th>compliment_list</th>\n",
       "      <th>compliment_more</th>\n",
       "      <th>compliment_note</th>\n",
       "      <th>compliment_photos</th>\n",
       "      <th>compliment_plain</th>\n",
       "      <th>compliment_profile</th>\n",
       "      <th>compliment_writer</th>\n",
       "      <th>cool</th>\n",
       "      <th>fans</th>\n",
       "      <th>funny</th>\n",
       "      <th>review_count</th>\n",
       "      <th>useful</th>\n",
       "      <th>user_id</th>\n",
       "      <th>member_yrs</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2.00</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>lzlZwIpuSWXEnNS91wxjHw</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>5.00</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>XvLBr-9smbI0m_a7dXtB7w</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4.00</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>QPT4Ud4H5sJVr68yXhoWFw</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4.05</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>19</td>\n",
       "      <td>0</td>\n",
       "      <td>i5YitlHZpf0B3R0s_8NVuw</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3.00</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>s4FoIXE_LSGviTHBe8dmcg</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   average_stars  compliment_cool  compliment_cute  compliment_funny  \\\n",
       "0           2.00                0                0                 0   \n",
       "1           5.00                0                0                 0   \n",
       "2           4.00                0                0                 0   \n",
       "3           4.05                0                0                 0   \n",
       "4           3.00                0                0                 0   \n",
       "\n",
       "   compliment_hot  compliment_list  compliment_more  compliment_note  \\\n",
       "0               0                0                0                0   \n",
       "1               0                0                0                0   \n",
       "2               0                0                0                0   \n",
       "3               0                0                0                0   \n",
       "4               0                0                0                0   \n",
       "\n",
       "   compliment_photos  compliment_plain  compliment_profile  compliment_writer  \\\n",
       "0                  0                 0                   0                  0   \n",
       "1                  0                 0                   0                  0   \n",
       "2                  0                 0                   0                  0   \n",
       "3                  0                 0                   0                  0   \n",
       "4                  0                 0                   0                  0   \n",
       "\n",
       "   cool  fans  funny  review_count  useful                 user_id  member_yrs  \n",
       "0     0     0      0             1       0  lzlZwIpuSWXEnNS91wxjHw           2  \n",
       "1     0     0      0             2       0  XvLBr-9smbI0m_a7dXtB7w           2  \n",
       "2     0     0      0             1       0  QPT4Ud4H5sJVr68yXhoWFw           1  \n",
       "3     0     0      0            19       0  i5YitlHZpf0B3R0s_8NVuw           3  \n",
       "4     0     0      0             3       0  s4FoIXE_LSGviTHBe8dmcg           1  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>cool</th>\n",
       "      <th>funny</th>\n",
       "      <th>stars</th>\n",
       "      <th>text</th>\n",
       "      <th>useful</th>\n",
       "      <th>user_id</th>\n",
       "      <th>year</th>\n",
       "      <th>month</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>The pizza was okay. Not the best I've had. I p...</td>\n",
       "      <td>0</td>\n",
       "      <td>msQe1u7Z_XuqjGoqhB0J5g</td>\n",
       "      <td>2011</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>I love this place! My fiance And I go here atl...</td>\n",
       "      <td>0</td>\n",
       "      <td>msQe1u7Z_XuqjGoqhB0J5g</td>\n",
       "      <td>2012</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Terrible. Dry corn bread. Rib tips were all fa...</td>\n",
       "      <td>3</td>\n",
       "      <td>msQe1u7Z_XuqjGoqhB0J5g</td>\n",
       "      <td>2014</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>Back in 2005-2007 this place was my FAVORITE t...</td>\n",
       "      <td>2</td>\n",
       "      <td>msQe1u7Z_XuqjGoqhB0J5g</td>\n",
       "      <td>2011</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>Delicious healthy food. The steak is amazing. ...</td>\n",
       "      <td>0</td>\n",
       "      <td>msQe1u7Z_XuqjGoqhB0J5g</td>\n",
       "      <td>2014</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   cool  funny  stars                                               text  \\\n",
       "0     0      0      2  The pizza was okay. Not the best I've had. I p...   \n",
       "1     0      0      5  I love this place! My fiance And I go here atl...   \n",
       "2     1      1      1  Terrible. Dry corn bread. Rib tips were all fa...   \n",
       "3     0      0      2  Back in 2005-2007 this place was my FAVORITE t...   \n",
       "4     0      0      5  Delicious healthy food. The steak is amazing. ...   \n",
       "\n",
       "   useful                 user_id  year  month  \n",
       "0       0  msQe1u7Z_XuqjGoqhB0J5g  2011      2  \n",
       "1       0  msQe1u7Z_XuqjGoqhB0J5g  2012     11  \n",
       "2       3  msQe1u7Z_XuqjGoqhB0J5g  2014     10  \n",
       "3       2  msQe1u7Z_XuqjGoqhB0J5g  2011      2  \n",
       "4       0  msQe1u7Z_XuqjGoqhB0J5g  2014      9  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "review.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Merge user dataframe and review dataframe, we use suffix to deal with the same column names."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "user_review = (review.merge(user, on='user_id', how='left', suffixes=['', '_user']).drop('user_id', axis=1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['cool', 'funny', 'stars', 'text', 'useful', 'year', 'month',\n",
       "       'average_stars', 'compliment_cool', 'compliment_cute',\n",
       "       'compliment_funny', 'compliment_hot', 'compliment_list',\n",
       "       'compliment_more', 'compliment_note', 'compliment_photos',\n",
       "       'compliment_plain', 'compliment_profile', 'compliment_writer',\n",
       "       'cool_user', 'fans', 'funny_user', 'review_count', 'useful_user',\n",
       "       'member_yrs'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user_review.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    5.996996e+06\n",
       "mean     3.736306e+00\n",
       "std      1.447924e+00\n",
       "min      0.000000e+00\n",
       "25%      3.000000e+00\n",
       "50%      4.000000e+00\n",
       "75%      5.000000e+00\n",
       "max      5.000000e+00\n",
       "Name: stars, dtype: float64"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user_review.stars.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We will remove zero stars."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "user_review = user_review[user_review.stars > 0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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JK1MRNwMTM7Msxt7LJK0lDOAkrQWRcTnI+LTxS1o+lG5DcvIxh6XJNXmbitJWrs+ReU+fltRuQfeSbVvQSNJ6wOXgCVJkkrGJWBJkqSSMQBKkiSVjN8BXIW2bdtmly5dGnsYkiRJqzRhwoQ5mdluVfUMgKvQpUsXxo8f39jDkCRJWqWIeLU+9VwCliRJKhkDoCRJUskYACVJkkrGAChJklQyBkBJkrRemj59OnvvvTfdunWje/fuXHLJJTXHfv3rX/O5z32O7t27c/rppy9z3muvvUbLli256KKLasqOP/54tt56a3r06LFM3YkTJ7L77rtTVVVFdXU148aNA2DevHkcdNBB9OrVi+7du3PdddfVnDN8+HC6du1K165dGT58eENceoPzl0BWobq6Ot0FLEnSujd79mxmz55N7969WbBgAbvuuisjR47k9ddf5+c//zn33HMPm2yyCW+88QZbb711zXmHH344zZo1o0+fPpx22mkAPPjgg7Rs2ZJjjjmG559/vqbu/vvvz6mnnkr//v259957ufDCCxkzZgznnXce8+bNY+jQobz55pt87nOf4x//+AcLFy6kurqa8ePHExHsuuuuTJgwgdatW6/z96cuETEhM6tXVc8ZQEmStF5q3749vXv3BmDzzTenW7duzJw5kyuuuIIzzjiDTTbZBGCZ8Ddy5Eh22GEHunfvvkxbffv2pU2bNh/rIyKYP38+UJn169ChQ035ggULyEwWLlxImzZtaNGiBffddx/77bcfbdq0oXXr1uy33378+c9/bpDrb0gGQEmStN6bNm0aTz/9NH369OGll17ioYceok+fPuy55548+eSTALz77rsMHTqUs88+u97tXnzxxXz/+9+nU6dOnHbaaZx//vkADBkyhEmTJtGhQwd69uzJJZdcQrNmzZg5cyadOnWqOb9jx47MnDlz7V7sOmAAlCRJ67WFCxdy+OGHc/HFF9OqVSuWLFnC3Llzefzxx/nFL37BEUccQWZy9tlnc+qpp9KyZct6t33FFVcwbNgwpk+fzrBhwxg8eDAA9913H1VVVcyaNYuJEycyZMgQ5s+fT11fnYuItXat64oBUJIkrbc++OADDj/8cI4++mgOO+wwoDLrdthhhxER7LbbbjRr1ow5c+bwxBNPcPrpp9OlSxcuvvhizjvvPC677LKVtj98+PCadr/61a/W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gBeBJcC3M/PDop0hwH1Ac+DazHyh6OIHwIiI+BnwNHBNUX4NcENETKUy83fUqvqQJEkqk6hMjq2iUsR3MvPX62A8653q6uocP358Yw9DkqT10s3DHmzsIWzwjjy1b73rRsSEzKxeVb1VzQACkJm/joj/B3SpfU5mXl/vEUmSJGm9UK8AGBE3UNm9OxFYumyagAFQkiSpialXAASqgZ2yPuvFkiRJWq/V9z6AzwOfasiBSJIkad2obwBsC7wYEfdFxF1LHw05MEmS1objjz+erbfemh49etSUnXnmmey8885UVVWx//77M2tW5bawd955Z015dXU1Dz/8cM05zZs3p6qqiqqqKr7yla/UlI8ePZrevXvTo0cPBg0axJIllR+pGjNmDFtssUXNOT/5yU8AmDJlSk1ZVVUVrVq14uKLL14Xb4VUo767gPesqzwzx671Ea1n3AUsSU3bgw8+SMuWLTnmmGN4/vnK7Wfnz59Pq1atALj00kt58cUXufLKK1m4cCGbbbYZEcGzzz7LEUccweTJkwFo2bIlCxcuXKbtjz76iO22245Ro0bx2c9+lrPOOovtttuOwYMHM2bMGC666CLuvvvuFY7tww8/ZNttt+WJJ55gu+22a6B3oGG5C7jhNcQu4HrNAGbm2Loe9R6NJEmNpG/fvrRp02aZsqXhD+Ddd98lonKb25YtW9Y8r12+Im+99RabbLIJn/3sZwHYb7/9uO222+o9tlGjRvHpT3+6yYY/NV31/Sm4BRExv3i8FxEfRsT8hh6cJEkN5cc//jGdOnXij3/8Y83yLMAdd9zBjjvuyJe+9CWuvfbamvL33nuP6upqdt99d0aOHAlA27Zt+eCDD1i6UnTrrbcyffr0mnMee+wxevXqRf/+/XnhhRdY3ogRIxg4cGBDXaK0QvWdAdw8M1sVj08AhwOXNezQJElqOD//+c+ZPn06Rx99NJdd9q//pR166KFMnjyZkSNHcuaZZ9aUv/baa4wfP54bb7yRU045hb/97W9EBCNGjODUU09lt912Y/PNN6dFi8oNNnr37s2rr77KM888w3e+8x0OOeSQZfpfvHgxd911F1/96lfXzQVLtdR3E8gyMnMksM9aHoskSevc1772tTqXbfv27cvf/vY35syZA0CHDh0A2GGHHdhrr714+umnAdhjjz146KGHGDduHH379qVr165A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wCbqL3/5C9tvvz3t2rVjo4024rDDDuPRRx+lffv2RASbbLIJxx13HOPGjQMqQe6www4jIvjMZz7D9ttvz+TJk+vVV/PmzTnyyCNrZv06dOjA7bffztNPP83Pf/5zALbYYouGuVBJkrTWGQCbqM6dO/P444+zaNEiMpNRo0bRrVs3Zs+u/LhJZjJy5Eh69OhRU3/UqFEAvP7660yZMoUddthhhe1nJlOnTq15/n//93/suOOOAMyZM4ePPvoIgPPPP5/jjz++wa5TkiStfa7bNVF9+vRhwIAB9O7dmxYtWrDLLrtw4okn0r9/f958800ZT4BmAAASmklEQVQyk6qqKq688koAzjzzTI499lh69uxJZjJ06FDatm0LwH/8x38wefJkFi5cSMeOHbnmmmvYb7/9GDRoEPPnzycz6dWrF1dccQUAY8aM4Yc//CERQd++fbn88ssb7X2QJEmrLyo/kKEVqa6uzvHjxzf2MCRpgzXhmyc29hA2eLtefVWDtX3zsAcbrG1VHHlq33rXjYgJmVm9qnouAUuSJJWMS8Br0dcvuaexh1AKfzj5S409BEmSmjRnACVJkkrGAChJklQyBkBJkqSSMQBKkiSVjAFQkiSpZAyAkiRJJWMAlCRJKhkDoCRJUskYACVJkkrGAChJklQyBkBJkqSSMQBK0mp65513GDBgADvuuCPdunXjscce48gjj6Sqqoqqqiq6dOlCVVUVAOPGjasp79WrF3fccQcA06dPZ++996Zbt250796dSy65pKb9t99+m/3224+uXbuy3377MXfu3JpjY8aMoaqqiu7du7Pnnnuu2wuXtMFo0dgDkKSm5uSTT6Zfv37ceuutLF68mEWLFnHzzTfXHP/e977HFltsAUCPHj0YP348LVq0YPbs2fTq1YuDDjqIFi1a8Mtf/pLevXuzYMECdt11V/bbbz922mknLrjgAvbdd1/OOOMMLrjgAi644AKGDh3KO++8w3//93/z5z//mc6dO/PGG2801lsgqYlzBlCSVsP8+fN58MEHGTx4MAAbb7wxW265Zc3xzOSWW25h4MCBAHzyk5+kRYvKv7Xfe+89IgKA9u3b07t3bwA233xzunXrxsyZMwG48847GTRoEACDBg1i5MiRANx4440cdthhdO7cGYCtt966oS9X0gbKAChJq+Hvf/877dq147jjjmOXXXbhhBNO4N133605/tBDD7HNNtvQtWvXmrInnniC7t2707NnT6688sqaQLjUtGnTePrpp+nTpw8Ar7/+Ou3btwcqQXHpTN9LL73E3Llz2Wuvvdh11125/vrrG/pyJW2gDICStBqWLFnCU089xUknncTTTz/NZpttxgUXXFBz/KabbqqZ/VuqT58+vPDCCzz55JOcf/75vPfeezXHFi5cyOGHH87FF19Mq1atVtn3hAkTuOeee7jvvvv46U9/yksvvbR2L1BSKRgAJWk1dOzYkY4dO9bM1g0YMICnnnoKqAS022+/nSOPPLLOc7t168Zmm23G888/D8AHH3zA4YcfztFHH81hhx1WU2+bbbZh9uzZAMyePbtmqbdjx47069ePzTbbjLZt29K3b1+eeeaZBrtWSRsuA6AkrYZPfepTdOrUiSlTpgAwatQodtppJwD+8pe/sOOOO9KxY8ea+q+88gpLliwB4NVXX2XKlCl06dKFzGTw4MF069aN7373u8v08ZWvfIXhw4cDMHz4cA4++GAADj74YB566CGWLFnCokWLeOKJJ+jWrVuDX7OkDY+7gCVpNf3617/m6KOPZvHixeywww5cd911AIwYMeJjy78PP/wwF1xwARtttBHNmjXjN7/5DW3btuXhhx/mhhtuoGfPnjW3jDnvvPM48MADOeOMMzjiiCO45ppr6Ny5M//7v/8LVGYQ+/Xrx84770yzZs044YQT6NGjx7q9eEkbhMjMxh7Deq26ujrHjx9fr7pfv+SeBh6NAP5w8pcaewiS1qIJ3zyxsYewwdv16qsarO2bhz3YYG2r4shT+9a7bkRMyMzqVdVzCViSJKlkXAKWtEE4/ubjG3sIG7xrj7y2sYcgaS1xBlCSJKlkDICSJEklYwCUJEkqGQOgJElSyRgAJUmSSsYAKEmSVDIGQEmSpJIxAEqSJJWMAVCSJKlkDICSJEklYwCUJEkqGQOg1Eg+/PBDdtllF7785S8DMGrUKHr37k1VVRVf/OIXmTp1KgCnnnoqVVVVVFVV8dnPfpYtt9yypo3TTz+d7t27061bN/7nf/6HzATgxz/+MZ06daJly5bL9HnllVfSs2fPmj5efPHFdXS1kqT1iQFQaiSXXHIJ3bp1q3l90kkn8cc//pGJEyfyta99jZ/97GcADBs2jIkTJzJx4kS+853vcNhhhwHw6KOP8sgjj/Dss8/y/PPP8+STTzJ27FgADjroIMaNG/exPr/2ta/x3HPPMXHiRE4//XS++93vroMrlSStbwyAUiOYMWMG99xzDyeccEJNWUQwf/58AObNm0eHDh0+dt5NN93EwIEDa+q/9957LF68mPfff58PPviAbbbZBoDdd9+d9u3bf+z8Vq1a1Tx/9913iYi1el2SpKahRWMPQCqjU045hQsvvJAFCxbUlP3ud7/jwAMPZNNNN6VVq1Y8/vjjy5zz6quv8sorr7DPPvsAsMcee7D33nvTvn17MpMhQ4YsM6O4Ipdffjm/+tWvWLx4MaNHj167FyZJahKcAZTWsbvvvputt96aXXfddZnyYcOGce+99zJjxgyOO+64jy3PjhgxggEDBtC8eXMApk6dyqRJk5gxYwYzZ85k9OjRPPjgg6vs/9vf/jZ/+9vfGDp0aM0ysySpXBolAEbEtIh4LiImRsT4oqxNRDwQES8Xf1sX5RERl0bE1Ih4NiJ612pnUFH/5YgYVKt816L9qcW5sbI+pHXpkUce4a677qJLly4cddRRjB49mi996Us888wz9OnTB4AjjzySRx99dJnzRowYUbP8C3DHHXew++6707JlS1q2bEn//v0/Nmu4MkcddRQjR45cOxclSWpSGnMGcO/MrMrM6uL1GcCozOwKjCpeA/QHuhaPE4EroBLmgLOBPsBuwNm1At0VRd2l5/VbRR/SOnP++eczY8YMpk2bxogRI9hnn3248847mTdvHi+99BIADzzwwDLLuVOmTGHu3LnsscceNWWdO3dm7NixLFmyhA8++ICxY8eucgn45Zdfrnl+zz330LVr17V8dZKkpmB9+g7gwcBexfPhwBjgB0X59Vm5v8XjEbFlRLQv6j6QmW8DRMQDQL+IGAO0yszHivLrgUOAP62kD6lRtWjRgquvvprDDz+cZs2a0bp1a6699tqa4zfddBNHHXXUMps2BgwYwOjRo+nZsycRQb9+/TjooIOAyu1hbrzxRhYtWkTHjh054YQTOOecc7jsssv4y1/+wkYbbUTr1q0ZPnz4Or9WSVLja6wAmMD9EZHAbzPzKmCbzJwNkJmzI2Lrou62wPRa584oylZWPqOOclbSxzIi4kQqM4h07tx5jS9SWpW99tqLvfbaC4BDDz2UQw89tM5655xzzsfKmjdvzm9/+9s661944YVceOGF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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x=user_review['stars'].value_counts()\n",
    "x=x.sort_index()\n",
    "plt.figure(figsize=(10,6))\n",
    "ax= sns.barplot(x.index, x.values, alpha=0.8)\n",
    "plt.title(\"Star Rating Distribution\")\n",
    "plt.ylabel('count')\n",
    "plt.xlabel('Star Ratings')\n",
    "rects = ax.patches\n",
    "labels = x.values\n",
    "for rect, label in zip(rects, labels):\n",
    "    height = rect.get_height()\n",
    "    ax.text(rect.get_x() + rect.get_width()/2, height + 5, label, ha='center', va='bottom')\n",
    "plt.show();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Good to know that most of the reviews star ratings are pretty high. And not many terrible reviews. Obvious, there’s an incentive for businesses to solicit as many good reviews as possible."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5    2641880\n",
       "4    1335957\n",
       "1     858139\n",
       "3     673206\n",
       "2     487813\n",
       "Name: stars, dtype: int64"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user_review.stars.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\SusanLi\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\scipy\\stats\\stats.py:1713: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.\n",
      "  return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1008x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(ncols=2, figsize=(14, 4))\n",
    "user_review.year.value_counts().sort_index().plot.bar(title='Reviews per Year', ax=axes[0]);\n",
    "sns.lineplot(x='year', y='stars', data=user_review, ax=axes[1])\n",
    "axes[1].set_title('Stars per year');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5     789312\n",
       "6     767460\n",
       "4     753483\n",
       "7     750720\n",
       "3     747215\n",
       "2     607776\n",
       "8     484111\n",
       "1     336847\n",
       "9     326262\n",
       "10    170026\n",
       "0     159440\n",
       "11     78357\n",
       "12     21801\n",
       "13      4185\n",
       "Name: member_yrs, dtype: int64"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user_review.member_yrs.value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There are over 4,000 members have been a Yelp member as long as it was founded."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>cool</th>\n",
       "      <th>funny</th>\n",
       "      <th>stars</th>\n",
       "      <th>text</th>\n",
       "      <th>useful</th>\n",
       "      <th>year</th>\n",
       "      <th>month</th>\n",
       "      <th>average_stars</th>\n",
       "      <th>compliment_cool</th>\n",
       "      <th>compliment_cute</th>\n",
       "      <th>...</th>\n",
       "      <th>compliment_photos</th>\n",
       "      <th>compliment_plain</th>\n",
       "      <th>compliment_profile</th>\n",
       "      <th>compliment_writer</th>\n",
       "      <th>cool_user</th>\n",
       "      <th>fans</th>\n",
       "      <th>funny_user</th>\n",
       "      <th>review_count</th>\n",
       "      <th>useful_user</th>\n",
       "      <th>member_yrs</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>The pizza was okay. Not the best I've had. I p...</td>\n",
       "      <td>0</td>\n",
       "      <td>2011</td>\n",
       "      <td>2</td>\n",
       "      <td>3.31</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>11</td>\n",
       "      <td>4</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>I love this place! My fiance And I go here atl...</td>\n",
       "      <td>0</td>\n",
       "      <td>2012</td>\n",
       "      <td>11</td>\n",
       "      <td>3.31</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>11</td>\n",
       "      <td>4</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Terrible. Dry corn bread. Rib tips were all fa...</td>\n",
       "      <td>3</td>\n",
       "      <td>2014</td>\n",
       "      <td>10</td>\n",
       "      <td>3.31</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>11</td>\n",
       "      <td>4</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>3 rows × 25 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   cool  funny  stars                                               text  \\\n",
       "0     0      0      2  The pizza was okay. Not the best I've had. I p...   \n",
       "1     0      0      5  I love this place! My fiance And I go here atl...   \n",
       "2     1      1      1  Terrible. Dry corn bread. Rib tips were all fa...   \n",
       "\n",
       "   useful  year  month  average_stars  compliment_cool  compliment_cute  \\\n",
       "0       0  2011      2           3.31                2                0   \n",
       "1       0  2012     11           3.31                2                0   \n",
       "2       3  2014     10           3.31                2                0   \n",
       "\n",
       "      ...      compliment_photos  compliment_plain  compliment_profile  \\\n",
       "0     ...                      0                 0                   0   \n",
       "1     ...                      0                 0                   0   \n",
       "2     ...                      0                 0                   0   \n",
       "\n",
       "   compliment_writer  cool_user  fans  funny_user  review_count  useful_user  \\\n",
       "0                  0          1     1           1            11            4   \n",
       "1                  0          1     1           1            11            4   \n",
       "2                  0          1     1           1            11            4   \n",
       "\n",
       "   member_yrs  \n",
       "0           7  \n",
       "1           7  \n",
       "2           7  \n",
       "\n",
       "[3 rows x 25 columns]"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user_review.head(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's have a look a review sample."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "We went here because we saw on social media that they had a vegan burger. Well, that wasn't the case. We got the veggie sandwich. The service was ok. Then while we were eating, the sterateck auditor came in. It was disappointing to see the entire staff scramble and start putting on gloves and stuff they should always be doing. Not sure I will return here. Standards should be upheld at all times, not when the inspector shows up.\n"
     ]
    }
   ],
   "source": [
    "review_sample = user_review.text.sample(1).iloc[0]\n",
    "print(review_sample)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's check the polarity of this review sample. Polarity ranges from -1 (most negative) to 1 (most positive)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Sentiment(polarity=-0.06333333333333332, subjectivity=0.5561111111111111)"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "TextBlob(review_sample).sentiment"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The above review has a polarity of about -0.06, meaning it is slightly negative, and a subjectivity of about 0.56, meaning it is fairly subjective."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To proceed faster, we will sample 1 million reviews from our current data. And add a new column for polarity."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "sample_reviews = user_review[['stars', 'text']].sample(1000000)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Define a function that accepts text and return the polarity."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "def detect_polarity(text):\n",
    "    return TextBlob(text).sentiment.polarity"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>stars</th>\n",
       "      <th>text</th>\n",
       "      <th>polarity</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>3832255</th>\n",
       "      <td>4</td>\n",
       "      <td>Love love love my neighborhood Sprouts! Everyb...</td>\n",
       "      <td>0.525000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5979201</th>\n",
       "      <td>4</td>\n",
       "      <td>Als Liebhaber der deep dish Pizzas, welche urs...</td>\n",
       "      <td>0.125000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33378</th>\n",
       "      <td>5</td>\n",
       "      <td>Always good food and if you buy a burrito toda...</td>\n",
       "      <td>0.453571</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1888280</th>\n",
       "      <td>4</td>\n",
       "      <td>Brussel Sprouts... I'm gonna base my review on...</td>\n",
       "      <td>0.160114</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1507759</th>\n",
       "      <td>4</td>\n",
       "      <td>On a rainy and wet day, the weather was even i...</td>\n",
       "      <td>0.267622</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         stars                                               text  polarity\n",
       "3832255      4  Love love love my neighborhood Sprouts! Everyb...  0.525000\n",
       "5979201      4  Als Liebhaber der deep dish Pizzas, welche urs...  0.125000\n",
       "33378        5  Always good food and if you buy a burrito toda...  0.453571\n",
       "1888280      4  Brussel Sprouts... I'm gonna base my review on...  0.160114\n",
       "1507759      4  On a rainy and wet day, the weather was even i...  0.267622"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sample_reviews['polarity'] = sample_reviews.text.apply(detect_polarity)\n",
    "sample_reviews.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First several rows look good, stars and polarity are in line with each other, means the higher the star, the higher the polarity, as it should be. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnQAAAGDCAYAAACiFo3zAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3X24XWV95//3RzIgiBDQwNAEGqypLWUuETKYap8UBwLTGpyRThiVSOlkqmirTh9w2vmR0drRmU6ptkqHEQpYR0SsJdYgzYDotBcgQSmISIkokIFCangsCoLf3x/7PuP2sE/OTnL2OWdlv1/Xta+99nfda537Puuck0/utddeqSokSZLUXc+a6w5IkiRp1xjoJEmSOs5AJ0mS1HEGOkmSpI4z0EmSJHWcgU6SJKnjDHSSZlWSW5P83Fz3Yy4leU2Se5I8luQlM7jfpUkqyYKd3P6nk9w+U/2RNHsMdJJmTJJvJnnVpNobk/z1xOuq+omqumaa/exSMOmA3wfeUlX7VtWX57ozE6rq/1TViyZeDzqekuYnA52ksTMPguIPA7fOcR9+wDz4nkjaBQY6SbOqf9YnybFJNiV5JMn9Sf6gNftCe36onZb8ySTPSvI7Se5K8kCSi5Ps37ff09q6byX5T5O+zroklyX5sySPAG9sX/vaJA8luS/JHyfZs29/leTNSe5I8miSdyf5kbbNI0ku7W8/aYwD+5pkrySPAXsAf5vk61NsX0l+NcmdSf4hyX9L8qzt7XuK/Zye5LbW/zuT/Pu+dT+XZEuS30ry98CfTtTa+o8AhwGfbsfgN5N8JslbJ32Nm5OcPNXxljQ7DHSS5tL7gfdX1X7AjwCXtvrPtOeF7bTktcAb2+MVwAuAfYE/BkhyBPAh4HXAIcD+wOJJX2sVcBmwEPgo8DTwduD5wE8CxwFvnrTNSuAYYAXwm8B57WscChwJnDrFuAb2taqeqKp9W5sXV9WPTP2t4TXAcuDo1vdf2t6+p9jHA8DPA/sBpwPnJDm6b/0/BQ6kN2O4tn/DqnoDcDfwC+0Y/FfgIuD1E22SvJje93nDdsYhaRYY6CTNtL9os14PJXmIXtCayneBFyZ5flU9VlXXbaft64A/qKo7q+ox4J3A6naq8LXAp6vqr6vqSeD/AybfqPraqvqLqvpeVX27qm6squuq6qmq+ibwP4CfnbTN+6rqkaq6FfgK8Fft6z8MXAFMdUHD9vo6rPdV1baquhv4Q74fHofed1V9pqq+Xj2fB/4K+Om+Jt8Dzm5B89tD9OlyYFmSZe31G4CPt++5pDlkoJM0006uqoUTD54569XvDOBHga8luSHJz2+n7Q8Bd/W9vgtYABzc1t0zsaKqHge+NWn7e/pfJPnRJH+Z5O/badjfozdb1+/+vuVvD3i9L4Ntr6/D6u/vXW2fO7TvJCcmuS7JthauT+IHx7i1qr4zbIeq6gl6s6ivb6eATwU+Muz2kkbHQCdpzlTVHVV1KnAQ8D7gsiTP4ZmzawD30js1OOEw4Cl6Ies+YMnEiiR7A8+b/OUmvT4X+BqwrJ3y/Y9Adn40Q/d1WIdO2v7eHdl3kr2AT9K7ovbgFq438INjHPR9Zpr1F9GbJTwOeLydDpc0xwx0kuZMktcnWVRV3wMeauWnga30Tge+oK/5x4C3Jzk8yb70ZtQ+XlVP0Xtv3C8keVm7UOE/M304ey7wCPBYkh8D3jRjA9t+X4f1G0kOSHIo8GvAx3dw33sCe9H7Xj6V5ETg+B0cx/384DGgBbjvAf8dZ+ekecNAJ2kurQRubVd+vh9YXVXfaadM3wP8TXsv3grgAnoB4gvAN4DvAG8FaO9xeytwCb3ZukfpXRDwxHa+9q8D/7a1/Z98PzDNhCn7ugMuB24EbgI+A5y/I/uuqkeBX6V3ivRBemNdv4N9+C/A77Rj8Ot99YuBfwb82Q7uT9KIpGq6GXdJ6pY2c/UQvdOp35jr/uyoJEWv75vnui+DJDkNWFtVPzXXfZHU4wydpN1Ckl9Isk97D97vA7cA35zbXu1+kuxD70KX8+a6L5K+z0AnaXexit4FA/cCy+idvvUUxAxKcgK99+TdD/yvOe6OpD6ecpUkSeo4Z+gkSZI6zkAnSZLUcTtyG5rdwvOf//xaunTpXHdDkiRpWjfeeOM/VNWi6dqNXaBbunQpmzZtmutuSJIkTSvJXdO38pSrJElS5xnoJEmSOs5AJ0mS1HEGOkmSpI4z0EmSJHWcgU6SJKnjDHSSJEkdZ6CTJEnqOAOdJElSxxnoJEmSOs5AJ0mS1HEGOkmSpI4z0EmSJHXcgrnugCRp/li3bmbbSZodIw10Sd4O/DJQwC3A6cAhwCXAgcCXgDdU1ZNJ9gIuBo4BvgX8m6r6ZtvPO4EzgKeBX62qK1t9JfB+YA/gw1X13lGOR5LUsyOBzvAnjd7ITrkmWQz8KrC8qo6kF7pWA+8DzqmqZcCD9IIa7fnBqnohcE5rR5Ij2nY/AawEPpRkjyR7AB8ETgSOAE5tbSVJksbKqN9DtwDYO8kCYB/gPuCVwGVt/UXAyW15VXtNW39ckrT6JVX1RFV9A9gMHNsem6vqzqp6kt6s36oRj0eSJGneGVmgq6r/C/w+cDe9IPcwcCPwUFU91ZptARa35cXAPW3bp1r75/XXJ20zVV2SJGmsjPKU6wH0ZswOB34IeA6906OT1cQmU6zb0fqgvqxNsinJpq1bt07XdUmSpE4Z5SnXVwHfqKqtVfVd4M+BlwEL2ylYgCXAvW15C3AoQFu/P7Ctvz5pm6nqz1BV51XV8qpavmjRopkYmyRJ0rwxykB3N7AiyT7tvXDHAV8FPge8trVZA1zelte317T1V1dVtfrqJHslORxYBnwRuAFYluTwJHvSu3Bi/QjHI0mSNC+N7GNLqur6JJfR+2iSp4AvA+cBnwEuSfK7rXZ+2+R84CNJNtObmVvd9nNrkkvphcGngDOr6mmAJG8BrqR3Be0FVXXrqMYjSZI0X430c+iq6mzg7EnlO+ldoTq57XeAU6bYz3uA9wyobwA27HpPJUmSustbf0mSJHWcgU6SJKnjDHSSJEkdZ6CTJEnqOAOdJElSxxnoJEmSOs5AJ0mS1HEGOkmSpI4z0EmSJHWcgU6SJKnjRnrrL0mS1q2b2XaSnskZOkmSpI4z0EmSJHWcgU6SJKnjDHSSJEkdZ6CTJEnqOAOdJElSx/mxJZI0BvxIEGn35gydJElSxxnoJEmSOs5AJ0mS1HEGOkmSpI4z0EmSJHWcgU6SJKnjDHSSJEkdZ6CTJEnqOAOdJElSxxnoJEmSOs5AJ0mS1HEGOkmSpI4bWaBL8qIkN/U9HknytiQHJtmY5I72fEBrnyQfSLI5yc1Jju7b15rW/o4ka/rqxyS5pW3zgSQZ1XgkSZLmq5EFuqq6vaqOqqqjgGOAx4FPAWcBV1XVMuCq9hrgRGBZe6wFzgVIciBwNvBS4Fjg7IkQ2Nqs7dtu5ajGI0mSNF/N1inX44CvV9VdwCrgola/CDi5La8CLq6e64CFSQ4BTgA2VtW2qnoQ2AisbOv2q6prq6qAi/v2JUmSNDZmK9CtBj7Wlg+uqvsA2vNBrb4YuKdvmy2ttr36lgH1Z0iyNsmmJJu2bt26i0ORJEmaX0Ye6JLsCbwa+MR0TQfUaifqzyxWnVdVy6tq+aJFi6bphiRJUrfMxgzdicCXqur+9vr+drqU9vxAq28BDu3bbglw7zT1JQPqkiRJY2U2At2pfP90K8B6YOJK1TXA5X3109rVriuAh9sp2SuB45Mc0C6GOB64sq17NMmKdnXraX37kiRJGhsLRrnzJPsA/wL4933l9wKXJjkDuBs4pdU3ACcBm+ldEXs6QFVtS/Ju4IbW7l1Vta0tvwm4ENgbuKI9JEmSxspIA11VPQ48b1LtW/Suep3ctoAzp9jPBcAFA+qbgCNnpLOSJEkdNdJAJ0nSsNatm9l20jjx1l+SJEkdZ6CTJEnqOAOdJElSxxnoJEmSOs5AJ0mS1HEGOkmSpI4z0EmSJHWcn0MnSR3mZ7JJAmfoJEmSOs9AJ0mS1HEGOkmSpI4z0EmSJHWcgU6SJKnjDHSSJEkdZ6CTJEnqOAOdJElSxxnoJEmSOs5AJ0mS1HEGOkmSpI4z0EmSJHWcgU6SJKnjDHSSJEkdZ6CTJEnqOAOdJElSxxnoJEmSOs5AJ0mS1HEGOkmSpI4z0EmSJHXcglHuPMlC4MPAkUABvwTcDnwcWAp8E/jFqnowSYD3AycBjwNvrKovtf2sAX6n7fZ3q+qiVj8GuBDYG9gA/FpV1SjHJEmaW+vWzWw7aXcw6hm69wOfraofA14M3AacBVxVVcuAq9prgBOBZe2xFjgXIMmBwNnAS4FjgbOTHNC2Obe1ndhu5YjHI0mSNO+MLNAl2Q/4GeB8gKp6sqoeAlYBF7VmFwEnt+VVwMXVcx2wMMkhwAnAxqraVlUPAhuBlW3dflV1bZuVu7hvX5IkSWNjlDN0LwC2An+a5MtJPpzkOcDBVXUfQHs+qLVfDNzTt/2WVttefcuA+jMkWZtkU5JNW7du3fWRSZIkzSOjDHQLgKOBc6vqJcA/8v3Tq4NkQK12ov7MYtV5VbW8qpYvWrRo+72WJEnqmFEGui3Alqq6vr2+jF7Au7+dLqU9P9DX/tC+7ZcA905TXzKgLkmSNFZGFuiq6u+Be5K8qJWOA74KrAfWtNoa4PK2vB44LT0rgIfbKdkrgeOTHNAuhjgeuLKtezTJinaF7Gl9+5IkSRobI/3YEuCtwEeT7AncCZxOL0RemuQM4G7glNZ2A72PLNlM72NLTgeoqm1J3g3c0Nq9q6q2teU38f2PLbmiPSRJksbKSANdVd0ELB+w6rgBbQs4c4r9XABcMKC+id5n3EmSJI0t7xQhSZLUcQY6SZKkjjPQSZIkdZyBTpIkqeMMdJIkSR1noJMkSeq4UX8OnSRpJ6xbN9c9kNQlztBJkiR1nIFOkiSp4wx0kiRJHWegkyRJ6jgDnSRJUscZ6CRJkjrOQCdJktRxBjpJkqSOM9BJkiR1nIFOkiSp4wx0kiRJHWegkyRJ6jgDnSRJUscZ6CRJkjrOQCdJktRxBjpJkqSOM9BJkiR1nIFOkiSp4wx0kiRJHWegkyRJ6jgDnSRJUscZ6CRJkjpupIEuyTeT3JLkpiSbWu3AJBuT3NGeD2j1JPlAks1Jbk5ydN9+1rT2dyRZ01c/pu1/c9s2oxyPJEnSfDQbM3SvqKqjqmp5e30WcFVVLQOuaq8BTgSWtcda4FzoBUDgbOClwLHA2RMhsLVZ27fdytEPR5IkaX6Zi1Ouq4CL2vJFwMl99Yur5zpgYZJDgBOAjVW1raoeBDYCK9u6/arq2qoq4OK+fUmSJI2NUQe6Av4qyY1J1rbawVV1H0B7PqjVFwP39G27pdW2V98yoC5JkjRWFox4/y+vqnuTHARsTPK17bQd9P632on6M3fcC5NrAQ477LDt91iSJKljRjpDV1X3tucHgE/Rew/c/e10Ke35gdZ8C3Bo3+ZLgHunqS8ZUB/Uj/OqanlVLV+0aNGuDkuSJGleGVmgS/KcJM+dWAaOB74CrAcmrlRdA1zeltcDp7WrXVcAD7dTslcCxyc5oF0McTxwZVv3aJIV7erW0/r2JUmSNDZGecr1YOBT7ZNEFgD/q6o+m+QG4NIkZwB3A6e09huAk4DNwOPA6QBVtS3Ju4EbWrt3VdW2tvwm4EJgb+CK9pAkSRorIwt0VXUn8OIB9W8Bxw2oF3DmFPu6ALhgQH0TcOQud1aSJKnDvFOEJElSxxnoJEmSOs5AJ0mS1HEGOkmSpI4b9QcLS5L6rFs31z2QtDsy0EmSdkvDhmdDtnYHnnKVJEnqOAOdJElSxxnoJEmSOs5AJ0mS1HFDXRSR5OVV9TfT1SRpXPnGeklzadgZuj8asiZJkqRZtt0ZuiQ/CbwMWJTkHX2r9gP2GGXHJEmSNJzpTrnuCezb2j23r/4I8NpRdUqSJEnD226gq6rPA59PcmFV3TVLfZIkSdIOGPZOEXslOQ9Y2r9NVb1yFJ2SJEnS8IYNdJ8A/gT4MPD06LojSZKkHTVsoHuqqs4daU8kSZK0U4b92JJPJ3lzkkOSHDjxGGnPJEmSNJRhZ+jWtOff6KsV8IKZ7Y4kSZJ21FCBrqoOH3VHJEmStHOGvfXXaYPqVXXxzHZHkiRJO2rYU67/vG/52cBxwJcAA50kSdIcG/aU61v7XyfZH/jISHokSZKkHTLsVa6TPQ4sm8mOSJIkaecM+x66T9O7qhVgD+DHgUtH1SlJkiQNb9j30P1+3/JTwF1VtWUE/ZEkSdIOGuqUa1V9Hvga8FzgAODJUXZKkiRJwxsq0CX5ReCLwCnALwLXJ3ntKDsmSZKk4Qx7UcRvA/+8qtZU1WnAscB/GmbDJHsk+XKSv2yvD09yfZI7knw8yZ6tvld7vbmtX9q3j3e2+u1JTuirr2y1zUnOGnIskiRJu5VhA92zquqBvtff2oFtfw24re/1+4BzqmoZ8CBwRqufATxYVS8EzmntSHIEsBr4CWAl8KEWEvcAPgicCBwBnNraSpIkjZVhQ9lnk1yZ5I1J3gh8Btgw3UZJlgD/Evhwex3glcBlrclFwMlteVV7TVt/XGu/Crikqp6oqm8Am+nNEB4LbK6qO6vqSeCS1laSJGmsbPcq1yQvBA6uqt9I8q+AnwICXAt8dIj9/yHwm/QupgB4HvBQVT3VXm8BFrflxcA9AFX1VJKHW/vFwHV9++zf5p5J9ZcO0SdJkqTdynQzdH8IPApQVX9eVe+oqrfTm537w+1tmOTngQeq6sb+8oCmNc26Ha0P6svaJJuSbNq6det2ei1JktQ9030O3dKqunlysao29V+0MIWXA69OchK9+7/uRy8ELkyyoM3SLQHube23AIcCW5IsAPYHtvXVJ/RvM1V9cn/PA84DWL58+cDQJ0kaT+vWzWw7aS5MN0P37O2s23t7G1bVO6tqSVUtpXdRw9VV9Trgc8DER56sAS5vy+vba9r6q6uqWn11uwr2cHq3HPsicAOwrF01u2f7GuunGY8kSdJuZ7pAd0OSfze5mOQM4MYB7YfxW8A7kmym9x6581v9fOB5rf4O4CyAqrqV3m3Gvgp8Fjizqp5uM3xvAa6kdxXtpa2tJEnSWJnulOvbgE8leR3fD3DLgT2B1wz7RarqGuCatnwnvStUJ7f5Dr0PLh60/XuA9wyob2CIq20lSZJ2Z9sNdFV1P/CyJK8Ajmzlz1TV1SPvmSRJkoYy3QwdAFX1OXrvfZMkSdI8M+wHC0uSJGmeMtBJkiR1nIFOkiSp4wx0kiRJHWegkyRJ6jgDnSRJUscZ6CRJkjrOQCdJktRxBjpJkqSOM9BJkiR1nIFOkiSp4wx0kiRJHWegkyRJ6jgDnSRJUscZ6CRJkjrOQCdJktRxBjpJkqSOWzDXHZAkqQvWrZvZdtJMcoZOkiSp4wx0kiRJHWegkyRJ6jgDnSRJUscZ6CRJkjrOQCdJktRxBjpJkqSOM9BJkiR1nIFOkiSp4wx0kiRJHTeyQJfk2Um+mORvk9ya5D+3+uFJrk9yR5KPJ9mz1fdqrze39Uv79vXOVr89yQl99ZWttjnJWaMaiyRJ0nw2yhm6J4BXVtWLgaOAlUlWAO8DzqmqZcCDwBmt/RnAg1X1QuCc1o4kRwCrgZ8AVgIfSrJHkj2ADwInAkcAp7a2kiRJY2Vkga56Hmsv/0l7FPBK4LJWvwg4uS2vaq9p649Lkla/pKqeqKpvAJuBY9tjc1XdWVVPApe0tpIkSWNlpO+hazNpNwEPABuBrwMPVdVTrckWYHFbXgzcA9DWPww8r78+aZup6oP6sTbJpiSbtm7dOhNDkyRJmjdGGuiq6umqOgpYQm9G7ccHNWvPmWLdjtYH9eO8qlpeVcsXLVo0fcclSZI6ZFaucq2qh4BrgBXAwiQL2qolwL1teQtwKEBbvz+wrb8+aZup6pIkSWNllFe5LkqysC3vDbwKuA34HPDa1mwNcHlbXt9e09ZfXVXV6qvbVbCHA8uALwI3AMvaVbN70rtwYv2oxiNJkjRfLZi+yU47BLioXY36LODSqvrLJF8FLknyu8CXgfNb+/OBjyTZTG9mbjVAVd2a5FLgq8BTwJlV9TRAkrcAVwJ7ABdU1a0jHI+kMbNu3Vz3QJKGM7JAV1U3Ay8ZUL+T3vvpJte/A5wyxb7eA7xnQH0DsGGXOytJktRh3ilCkiSp4wx0kiRJHWegkyRJ6jgDnSRJUscZ6CRJkjrOQCdJktRxBjpJkqSOM9BJkiR1nIFOkiSp4wx0kiRJHWegkyRJ6jgDnSRJUscZ6CRJkjrOQCdJktRxC+a6A5Ik7U7WrRtNW2l7nKGTJEnqOAOdJElSxxnoJEmSOs5AJ0mS1HEGOkmSpI4z0EmSJHWcgU6SJKnj/Bw6SWPHz/6StLtxhk6SJKnjDHSSJEkdZ6CTJEnqOAOdJElSxxnoJEmSOs5AJ0mS1HEjC3RJDk3yuSS3Jbk1ya+1+oFJNia5oz0f0OpJ8oEkm5PcnOTovn2tae3vSLKmr35MklvaNh9IklGNR5Ikab4a5QzdU8B/qKofB1YAZyY5AjgLuKqqlgFXtdcAJwLL2mMtcC70AiBwNvBS4Fjg7IkQ2Nqs7dtu5QjHI0mSNC+NLNBV1X1V9aW2/ChwG7AYWAVc1JpdBJzcllcBF1fPdcDCJIcAJwAbq2pbVT0IbARWtnX7VdW1VVXAxX37kiRJGhuzcqeIJEuBlwDXAwdX1X3QC31JDmrNFgP39G22pdW2V98yoD7o66+lN5PHYYcdtmuDkSRphgx71xLvbqLpjPyiiCT7Ap8E3lZVj2yv6YBa7UT9mcWq86pqeVUtX7Ro0XRdliRJ6pSRBrok/4RemPtoVf15K9/fTpfSnh9o9S3AoX2bLwHunaa+ZEBdkiRprIzyKtcA5wO3VdUf9K1aD0xcqboGuLyvflq72nUF8HA7NXslcHySA9rFEMcDV7Z1jyZZ0b7WaX37kiRJGhujfA/dy4E3ALckuanV/iPwXuDSJGcAdwOntHUbgJOAzcDjwOkAVbUtybuBG1q7d1XVtrb8JuBCYG/givaQJEkaKyMLdFX11wx+nxvAcQPaF3DmFPu6ALhgQH0TcOQudFOSJKnzvFOEJElSxxnoJEmSOs5AJ0mS1HEGOkmSpI6blTtFSNJs8NP0JY0rZ+gkSZI6zkAnSZLUcQY6SZKkjjPQSZIkdZyBTpIkqeMMdJIkSR1noJMkSeo4A50kSVLHGegkSZI6zkAnSZLUcQY6SZKkjjPQSZIkdZyBTpIkqeMMdJIkSR1noJMkSeq4BXPdAUmazrp1c90DaW4N+zvg78r4coZOkiSp4wx0kiRJHWegkyRJ6jgDnSRJUscZ6CRJkjrOQCdJktRxBjpJkqSOM9BJkiR13MgCXZILkjyQ5Ct9tQOTbExyR3s+oNWT5ANJNie5OcnRfdusae3vSLKmr35MklvaNh9IklGNRZIkaT4b5QzdhcDKSbWzgKuqahlwVXsNcCKwrD3WAudCLwACZwMvBY4Fzp4Iga3N2r7tJn8tSZKksTCyW39V1ReSLJ1UXgX8XFu+CLgG+K1Wv7iqCrguycIkh7S2G6tqG0CSjcDKJNcA+1XVta1+MXAycMWoxiNJ0nznLcLG12y/h+7gqroPoD0f1OqLgXv62m1pte3VtwyoS5IkjZ35clHEoPe/1U7UB+88WZtkU5JNW7du3ckuSpIkzU+zHejub6dSac8PtPoW4NC+dkuAe6epLxlQH6iqzquq5VW1fNGiRbs8CEmSpPlkZO+hm8J6YA3w3vZ8eV/9LUkuoXcBxMNVdV+SK4Hf67sQ4njgnVW1LcmjSVYA1wOnAX80mwORtOt8H48kzYyRBbokH6N3UcPzk2yhd7Xqe4FLk5wB3A2c0ppvAE4CNgOPA6cDtOD2buCG1u5dExdIAG+idyXt3vQuhvCCCEmSNJZGeZXrqVOsOm5A2wLOnGI/FwAXDKhvAo7clT5KkiTtDubLRRGSJEnaSQY6SZKkjjPQSZIkddxsX+UqSZLmmHeU2P04QydJktRxztBJmnH+r16SZpczdJIkSR1noJMkSeo4A50kSVLHGegkSZI6zkAnSZLUcV7lKkmSBvLz6rrDQCdpaP7RlqT5yVOukiRJHWegkyRJ6jgDnSRJUscZ6CRJkjrOiyKkMeeFDpLUfc7QSZIkdZwzdJIkaVbsyBmBuTp70NXP3jPQSbup+fbHRtLuy783c89TrpIkSR3nDJ3UMf5PWJI0mTN0kiRJHWegkyRJ6jhPuUqSpHmnq1ebzhVn6CRJkjrOGTppJ830/x79X6Yk7Tj/xvYY6KQR293/iEiS5l7nT7kmWZnk9iSbk5w11/2RJEmabZ2eoUuyB/BB4F8AW4Abkqyvqq/OZb+c/p1//F5L0njb3f8d6HSgA44FNlfVnQBJLgFWAXMa6MbR7v6LIknSfNb1QLcYuKfv9RbgpXPUlzk3ipseG9QkSZr/UlVz3YedluQU4ISq+uX2+g3AsVX11knt1gJr28sXAbePuGvPB/5hxF9jvhrnscN4j3+cxw7jPX7HPr7GefyzNfYfrqpF0zXq+gzdFuDQvtdLgHsnN6qq84DzZqtTSTZV1fLZ+nrzyTiPHcZ7/OM8dhjv8Tv28Rw7jPf459vYu36V6w3AsiSHJ9kTWA2sn+M+SZIkzapOz9BV1VNJ3gJcCewBXFBVt85xtyRJkmZVpwMdQFVtADbMdT8mmbXTu/PQOI8dxnv84zx2GO/xO/bxNc7jn1dj7/RFEZIkSer+e+gkSZLGnoFuJyU5JcmtSb6XZMqrXKa6NVm7kOP6JHck+Xi7qKMTkhyYZGPr+8YkBwxo84okN/U9vpPk5LbuwiTf6Ft31OyPYucNM/7W7um+Ma7vq+/ux/6oJNe234+bk/ybvnWdO/bT3V4wyV7tOG5ux3Vp37p3tvrtSU6YzX7PhCHG/o4kX23H+aokP9y3buDPf5cMMf43JtnaN85f7lu3pv2e3JFkzez2fNcNMfZz+sb9d0ke6lvX6WOf5IIkDyT5yhTrk+QD7Xtzc5JXoDRvAAAHPklEQVSj+9bN3XGvKh878QB+nN5n2l0DLJ+izR7A14EXAHsCfwsc0dZdCqxuy38CvGmux7QDY/+vwFlt+SzgfdO0PxDYBuzTXl8IvHauxzHq8QOPTVHfrY898KPAsrb8Q8B9wMIuHvvt/Q73tXkz8CdteTXw8bZ8RGu/F3B4288ecz2mGR77K/p+r980Mfb2euDPf1ceQ47/jcAfD9j2QODO9nxAWz5grsc0k2Of1P6t9C5K3F2O/c8ARwNfmWL9ScAVQIAVwPXz4bg7Q7eTquq2qpruA4r/363JqupJ4BJgVZIArwQua+0uAk4eXW9n3Cp6fYbh+v5a4IqqenykvZo9Ozr+/2ccjn1V/V1V3dGW7wUeAKb9UMx5auDv8KQ2/d+Ty4Dj2nFeBVxSVU9U1TeAzW1/XTHt2Kvqc32/19fR+yzQ3cUwx34qJwAbq2pbVT0IbARWjqifo7CjYz8V+Nis9GwWVNUX6E1CTGUVcHH1XAcsTHIIc3zcDXSjNejWZIuB5wEPVdVTk+pdcXBV3QfQng+apv1qnvnL/p42VX1Okr1G0ckRGnb8z06yKcl1E6ebGbNjn+RYev/D/3pfuUvHfqrf4YFt2nF9mN5xHmbb+WxH+38GvVmLCYN+/rtk2PH/6/bzfFmSiQ+6H5tj306zHw5c3Vfu+rGfzlTfnzk97p3/2JJRSvK/gX86YNVvV9Xlw+xiQK22U583tjf2HdzPIcA/o/dZgRPeCfw9vX/ozwN+C3jXzvV0NGZo/IdV1b1JXgBcneQW4JEB7XbnY/8RYE1Vfa+V5/2xn2SY39XO/p5PY+j+J3k9sBz42b7yM37+q+rrg7afp4YZ/6eBj1XVE0l+hd5M7SuH3HY+25H+rwYuq6qn+2pdP/bTmZe/8wa67aiqV+3iLqa6Ndk/0JuiXdD+Rz/wlmVzaXtjT3J/kkOq6r72j/YD29nVLwKfqqrv9u37vrb4RJI/BX59Rjo9g2Zi/O10I1V1Z5JrgJcAn2QMjn2S/YDPAL/TTklM7HveH/tJhrm94ESbLUkWAPvTO10z1K0J57Gh+p/kVfTC/s9W1RMT9Sl+/rv0j/q046+qb/W9/J/A+/q2/blJ214z4z0cnR352V0NnNlf2A2O/XSm+v7M6XH3lOtoDbw1WfXePfk5eu8tA1gDDDPjN1+sp9dnmL7vz3hvRQsCE+8nOxkYeCXRPDbt+JMcMHE6McnzgZcDXx2HY99+1j9F7z0mn5i0rmvHfpjbC/Z/T14LXN2O83pgdXpXwR4OLAO+OEv9ngnTjj3JS4D/Aby6qh7oqw/8+Z+1ns+MYcZ/SN/LVwO3teUrgePb9+EA4Hh+8CzFfDfUbTWTvIjem/+v7avtDsd+OuuB09rVriuAh9t/Vuf2uM/W1Re72wN4Db00/gRwP3Blq/8QsKGv3UnA39H738lv99VfQO+P+2bgE8Becz2mHRj784CrgDva84Gtvhz4cF+7pcD/BZ41afurgVvo/WP+Z8C+cz2mmR4/8LI2xr9tz2eMy7EHXg98F7ip73FUV4/9oN9heqeJX92Wn92O4+Z2XF/Qt+1vt+1uB06c67GMYOz/u/39mzjO61t9yp//Lj2GGP9/AW5t4/wc8GN92/5S+5nYDJw+12OZ6bG31+uA907arvPHnt4kxH3t79gWeu8P/RXgV9r6AB9s35tb6Puki7k87t4pQpIkqeM85SpJktRxBjpJkqSOM9BJkiR1nIFOkiSp4wx0kiRJHWegkzTWkjyd5KYkX0nyiST7TNP+sZ34GhuSLGyPN+98byVpMAOdpHH37ao6qqqOBJ6k93lTM6J98OizquqkqnoIWAgY6CTNOAOdJH3f/wFeCJDkHW3W7itJ3ja5YZJ9k1yV5EtJbkmyqtWXJrktyYeALwGHJvlm+9T89wI/0mYE/1uSj0xs17b9aJJXz8pIJe1W/GBhSWMtyWNVtW+7D+sngc/Su+PDhcAKep8Kfz3w+qr68qT2+1TVIy2sXUfv9l4/DNwJvKzafWyTfJPe3TT2Bf6yzQaS5GeBt1fVyUn2p3e3hWXVu8+vJA3NGTpJ427vJDcBm4C7gfOBnwI+VVX/WFWPAX8O/PSk7QL8XpKb6d0CazFwcFt310SY256q+jzwwiQH0bvv8ScNc5J2xoK57oAkzbFvV9VR/YUkGWK71wGLgGOq6rttFu7Zbd0/7sDX/0jb12p694GUpB3mDJ0kPdMXgJOT7JPkOcBr6L2/rt/+wAMtzL2C3qnW6TwKPHdS7ULgbQBVdesu9VrS2HKGTpImqaovJbmQ3nvpAD5cVV+e1OyjwKeTbKL33revDbHfbyX5myRfAa6oqt+oqvuT3Ab8xQwOQdKY8aIISZpD7XPvbgGOrqqH57o/krrJU66SNEeSvIrezN4fGeYk7Qpn6CRJkjrOGTpJkqSOM9BJkiR1nIFOkiSp4wx0kiRJHWegkyRJ6jgDnSRJUsf9/2tV3mfetQKrAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# A histogram of the polarity scores.\n",
    "num_bins = 50\n",
    "plt.figure(figsize=(10,6))\n",
    "n, bins, patches = plt.hist(sample_reviews.polarity, num_bins, facecolor='blue', alpha=0.5)\n",
    "plt.xlabel('Polarity')\n",
    "plt.ylabel('Count')\n",
    "plt.title('Histogram of polarity')\n",
    "plt.show();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Most polarity scores are above 0, means most of them are postive sentiment, this is in line with the star distribution. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Box plot of sentiment grouped by stars\n",
    "plt.figure(figsize=(10,6))\n",
    "sns.boxenplot(x='stars', y='polarity', data=sample_reviews)\n",
    "plt.show();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In general, this is as good as we'd expect. Let's investigate deeper and see whether we can find anything interesting or outlier."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "pd.set_option('max_colwidth', 400)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Reviews that have the lowest polarity:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "676402                                                                                              Awful quality with awful staff. 9 of us had stomach upset after having lunch buffet.\n",
       "5721798                                                                                                                        worst internet ever, i have to use my phone data at home!\n",
       "2992269    Horrible customer service! Waited at the front desk for 30 mins no one came and asked me if I needed anything or if I was already being assisted. Never come here EVER again.\n",
       "1274473                                                                                                         I can't stand Ghazale.  Worst falafel ever. They microwave your falafel.\n",
       "1307440                                              Needed my car towed from my house to a garage that was 2 miles\\naway. The cost of the tow was $145.00. Completly outrageous price!!\n",
       "Name: text, dtype: object"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sample_reviews[sample_reviews.polarity == -1].text.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Reviews that have the lowest stars:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4385486                                                                                                                                                 Do not use this company... Crappy customer service and not friendly staff... Call center staff the same.. Call Monday and didn't get service until today Wednesday . I am not using anymore... They are bad bad bad... They are contracted by AHS.. Called AHS TOO\n",
       "343256                                                                     We tried Swerve because we purchased a Groupon.  Our server was very nice but our food didn't come out to us for 45 minutes. Out of 14 tables only three were being used. We kept asking when we would receive our salad and burger and keep being given the answer \"two more minutes\". Once our food did come out the burger was unimpressive.\n",
       "4242301    First and probably only visit. We ordered a Salted Caramel Latte, Cappuccino, Affogato and Squid Rings.\\n\\nNo latte art here, too much milk foam, and espresso was very mild.\\n\\nNever seen an affogato come with chocolate ice cream, and scooped so sloppy. Looks kinda gross, to be honest.\\n\\nMusic was too loud. The rag used to clean tables had a bad lingering smell. That's just something that bot...\n",
       "3074648    I would not recommend this salon.  The staff are not very friendly and they switch people in and out to work on you. I believe they do this to spread the tips around. I had one girl start my pedicure and another girl finished it. I thought maybe she had an appointment, but she just went and sat at the desk. She also scrubbed so hard when removing the callus that I have 2 sores on my right foot...\n",
       "5335387    Please skip past this company and hire one of the other hundreds of party bus companies in town.\\n\\n   I am a Maid of Honor and needed a party bus for a bachelorette party. I was specifically looking for a two hour rental, that could be split into a one and a half hours of drive time, with a drop off at a show; and another half hour ride back from the show, to our hotel. I went through a large...\n",
       "Name: text, dtype: object"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sample_reviews[sample_reviews.stars == 1].text.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Reviews that have lowest polarity (most negative sentiment) but with a 5-star:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>stars</th>\n",
       "      <th>text</th>\n",
       "      <th>polarity</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5630685</th>\n",
       "      <td>5</td>\n",
       "      <td>The stuffing I just administered to myself was thorough and devastating. But I'll assault myself again here in identical fashion when the opportunity presents itself. Our waiter knew what I needed and provided recommendations tailored to my gluttonous yet vegetarian needs. All of the stars.</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3175756</th>\n",
       "      <td>5</td>\n",
       "      <td>Bueno, alguien tiene que hacer una review en español. Al menos voy a hacer de la noche (no fui al day club)\\nEl boliche explota. Está 10 puntos y tenés un sector abierto (el patio) donde pasan mas hip hop , y es más tranqui para charlar y conocer gente. Asi mismo está el sector de adentro, donde toca el Dj, que en nuestro caso fue Porter Robinson. Ahí adentro casi no se puede estar de lo lleno...</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5296058</th>\n",
       "      <td>5</td>\n",
       "      <td>One thing to say Bloody Mary Bar off the charts!</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4350889</th>\n",
       "      <td>5</td>\n",
       "      <td>PBJ and Bacon burger is  heaven sent!!!!  No Joke!  Don't be afraid because it sounds funky... it is DELISH!!!!!</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4754984</th>\n",
       "      <td>5</td>\n",
       "      <td>I'm that annoying customer with food allergies and restrictions, but Peter was so patient and helpful!!! Made me feel welcomed and told me all my options... Thank you Peter!</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5146895</th>\n",
       "      <td>5</td>\n",
       "      <td>I've overheard the worst thing about this bar is the font size on the bill.....it's all about size people.</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3209896</th>\n",
       "      <td>5</td>\n",
       "      <td>Un petit bijou du Mile-Ex, le marché Soupson vaut absolument le détour. C'est à la fois un petit marché hétéroclite où on peut acheter bière, bonbon, grignotines et fruits/légumes (attention, les prix sont plus élevés qu'ailleurs) et un comptoir à sandwiches et à soupes parfait pour le lunch.\\n\\nLes soupes sont fabuleusement incroyables, je ne comprends pas comment la sympathique propriétaire ...</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5519806</th>\n",
       "      <td>5</td>\n",
       "      <td>Threw on my flowmasters and couldn't be fucking happier, transformed my cars exhaust system into a beast!!!</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4425019</th>\n",
       "      <td>5</td>\n",
       "      <td>In the midst of a horrible night, my girlfriend and I stopped in at around 1 AM. The proprieter of the bar and the clientele were so caring and welcoming that it saved our evening from despair. Thank you thank you thank you.</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3852388</th>\n",
       "      <td>5</td>\n",
       "      <td>chicken!\\nwaffles!\\nkool aid!\\n\\nwhy aren't you eating at lolo's yet?</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         stars  \\\n",
       "5630685      5   \n",
       "3175756      5   \n",
       "5296058      5   \n",
       "4350889      5   \n",
       "4754984      5   \n",
       "5146895      5   \n",
       "3209896      5   \n",
       "5519806      5   \n",
       "4425019      5   \n",
       "3852388      5   \n",
       "\n",
       "                                                                                                                                                                                                                                                                                                                                                                                                                    text  \\\n",
       "5630685                                                                                                              The stuffing I just administered to myself was thorough and devastating. But I'll assault myself again here in identical fashion when the opportunity presents itself. Our waiter knew what I needed and provided recommendations tailored to my gluttonous yet vegetarian needs. All of the stars.   \n",
       "3175756  Bueno, alguien tiene que hacer una review en español. Al menos voy a hacer de la noche (no fui al day club)\\nEl boliche explota. Está 10 puntos y tenés un sector abierto (el patio) donde pasan mas hip hop , y es más tranqui para charlar y conocer gente. Asi mismo está el sector de adentro, donde toca el Dj, que en nuestro caso fue Porter Robinson. Ahí adentro casi no se puede estar de lo lleno...   \n",
       "5296058                                                                                                                                                                                                                                                                                                                                                                 One thing to say Bloody Mary Bar off the charts!   \n",
       "4350889                                                                                                                                                                                                                                                                                                 PBJ and Bacon burger is  heaven sent!!!!  No Joke!  Don't be afraid because it sounds funky... it is DELISH!!!!!   \n",
       "4754984                                                                                                                                                                                                                                    I'm that annoying customer with food allergies and restrictions, but Peter was so patient and helpful!!! Made me feel welcomed and told me all my options... Thank you Peter!   \n",
       "5146895                                                                                                                                                                                                                                                                                                       I've overheard the worst thing about this bar is the font size on the bill.....it's all about size people.   \n",
       "3209896  Un petit bijou du Mile-Ex, le marché Soupson vaut absolument le détour. C'est à la fois un petit marché hétéroclite où on peut acheter bière, bonbon, grignotines et fruits/légumes (attention, les prix sont plus élevés qu'ailleurs) et un comptoir à sandwiches et à soupes parfait pour le lunch.\\n\\nLes soupes sont fabuleusement incroyables, je ne comprends pas comment la sympathique propriétaire ...   \n",
       "5519806                                                                                                                                                                                                                                                                                                      Threw on my flowmasters and couldn't be fucking happier, transformed my cars exhaust system into a beast!!!   \n",
       "4425019                                                                                                                                                                                 In the midst of a horrible night, my girlfriend and I stopped in at around 1 AM. The proprieter of the bar and the clientele were so caring and welcoming that it saved our evening from despair. Thank you thank you thank you.   \n",
       "3852388                                                                                                                                                                                                                                                                                                                                            chicken!\\nwaffles!\\nkool aid!\\n\\nwhy aren't you eating at lolo's yet?   \n",
       "\n",
       "         polarity  \n",
       "5630685      -1.0  \n",
       "3175756      -1.0  \n",
       "5296058      -1.0  \n",
       "4350889      -1.0  \n",
       "4754984      -1.0  \n",
       "5146895      -1.0  \n",
       "3209896      -1.0  \n",
       "5519806      -1.0  \n",
       "4425019      -1.0  \n",
       "3852388      -1.0  "
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sample_reviews[(sample_reviews.stars == 5) & (sample_reviews.polarity == -1)].head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Reviews that have the highest polarity (most positive sentiment) but with a 1-star:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>stars</th>\n",
       "      <th>text</th>\n",
       "      <th>polarity</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>4307505</th>\n",
       "      <td>1</td>\n",
       "      <td>Discount Tire treated me like they were doing me a favor and may have a 4 hour wait, no promises, and some mumbo jumbo about additional road hazard expense, so I went to Costco. In and out in an hour with excellent pricing at Costco. Awesome!</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5819703</th>\n",
       "      <td>1</td>\n",
       "      <td>$2.71 for a bottle of water...horrible!!!  16.9 ounces of Nestle. Gimme a fffff break! Not even good quality alkaline water! Get outta here!!!!</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3751568</th>\n",
       "      <td>1</td>\n",
       "      <td>Sahara was perfect when I had the college student's budget. But I'll never stay here again, I don't even think I want to even walk in here again. All the rooms smell like smoke even if it's a non-smoking room and the linens look like they're been there since the hotel has opened.</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>227044</th>\n",
       "      <td>1</td>\n",
       "      <td>Problem is that they use \"take a number\" system, then let locals cut in line. I waited my turn for 3o minutes while people were allowed to cut. Cavatelli was so so at best.</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5922719</th>\n",
       "      <td>1</td>\n",
       "      <td>They have made so many mistakes here, They must have underaged teenagers running the accounting deptartment!\\nGet it together!!!!!!!!!!!</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2129917</th>\n",
       "      <td>1</td>\n",
       "      <td>Aweful the lack of cheese is one thing but where was the meat...?!??!?!no cilantro drizzle or anything would rather have anything else but the beer is awesome! !!!!!!!!</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4268651</th>\n",
       "      <td>1</td>\n",
       "      <td>Q=Quite\\nU=Unsanitary\\nA=And\\nD=Dumpy\\n\\nA great location, however!</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>156915</th>\n",
       "      <td>1</td>\n",
       "      <td>I bought once from this guy Jerry, and had an excellent experience with him and their products. But when I called to have him bring me some steaks again, Jerry had his arrogant boss with him who is Fat and bald (just like myself lol) this boss insulted me to the max by mentioning my departed Son who was an army medic. To the management, please do not let this SOB be associated with your busine...</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>348113</th>\n",
       "      <td>1</td>\n",
       "      <td>Visited this location yesterday 5/16, I ordered a tuna lettuce wrap with the works. When lunch time rolls around, I take a healthy bite of my wrap and what do I find???  NO TUNA!!!!</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5645590</th>\n",
       "      <td>1</td>\n",
       "      <td>Just called to find if they have a product in stock, the guy on the phone was complaining about not hearing me well, before I had a chance to improve my reception he just hanged up on me! What a great way to deal with customers !</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         stars  \\\n",
       "4307505      1   \n",
       "5819703      1   \n",
       "3751568      1   \n",
       "227044       1   \n",
       "5922719      1   \n",
       "2129917      1   \n",
       "4268651      1   \n",
       "156915       1   \n",
       "348113       1   \n",
       "5645590      1   \n",
       "\n",
       "                                                                                                                                                                                                                                                                                                                                                                                                                    text  \\\n",
       "4307505                                                                                                                                                               Discount Tire treated me like they were doing me a favor and may have a 4 hour wait, no promises, and some mumbo jumbo about additional road hazard expense, so I went to Costco. In and out in an hour with excellent pricing at Costco. Awesome!   \n",
       "5819703                                                                                                                                                                                                                                                                  $2.71 for a bottle of water...horrible!!!  16.9 ounces of Nestle. Gimme a fffff break! Not even good quality alkaline water! Get outta here!!!!   \n",
       "3751568                                                                                                                         Sahara was perfect when I had the college student's budget. But I'll never stay here again, I don't even think I want to even walk in here again. All the rooms smell like smoke even if it's a non-smoking room and the linens look like they're been there since the hotel has opened.   \n",
       "227044                                                                                                                                                                                                                                      Problem is that they use \"take a number\" system, then let locals cut in line. I waited my turn for 3o minutes while people were allowed to cut. Cavatelli was so so at best.   \n",
       "5922719                                                                                                                                                                                                                                                                         They have made so many mistakes here, They must have underaged teenagers running the accounting deptartment!\\nGet it together!!!!!!!!!!!   \n",
       "2129917                                                                                                                                                                                                                                         Aweful the lack of cheese is one thing but where was the meat...?!??!?!no cilantro drizzle or anything would rather have anything else but the beer is awesome! !!!!!!!!   \n",
       "4268651                                                                                                                                                                                                                                                                                                                                              Q=Quite\\nU=Unsanitary\\nA=And\\nD=Dumpy\\n\\nA great location, however!   \n",
       "156915   I bought once from this guy Jerry, and had an excellent experience with him and their products. But when I called to have him bring me some steaks again, Jerry had his arrogant boss with him who is Fat and bald (just like myself lol) this boss insulted me to the max by mentioning my departed Son who was an army medic. To the management, please do not let this SOB be associated with your busine...   \n",
       "348113                                                                                                                                                                                                                             Visited this location yesterday 5/16, I ordered a tuna lettuce wrap with the works. When lunch time rolls around, I take a healthy bite of my wrap and what do I find???  NO TUNA!!!!   \n",
       "5645590                                                                                                                                                                            Just called to find if they have a product in stock, the guy on the phone was complaining about not hearing me well, before I had a chance to improve my reception he just hanged up on me! What a great way to deal with customers !   \n",
       "\n",
       "         polarity  \n",
       "4307505       1.0  \n",
       "5819703       1.0  \n",
       "3751568       1.0  \n",
       "227044        1.0  \n",
       "5922719       1.0  \n",
       "2129917       1.0  \n",
       "4268651       1.0  \n",
       "156915        1.0  \n",
       "348113        1.0  \n",
       "5645590       1.0  "
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sample_reviews[(sample_reviews.stars == 1) & (sample_reviews.polarity == 1)].head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "TextBlob goes along finding words and phrases it can assign polarity and subjectivity to, and it averages them all together for longer text, such as our Yelp reviews. Want to learn how TextBlob calculates polarity and subjectivity, this article from Aaron has given a simple but clear explanation. https://planspace.org/20150607-textblob_sentiment/"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
